import grails.converters.*
class UsuarioController {
    
    def index = { redirect(action:create,params:params) }

    static allowedMethods = [delete:'POST', save:'POST', update:'POST']

    def list = {
            params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
            [ usuarioInstanceList: Usuario.list( params ),
             usuarioInstanceTotal: Usuario.count() ]
    }
/**
* Este metodo muestra los datos del usuario, en caso de que no exista
* emite un mensaje de error
*/
    def show = {
        def usuarioInstance = Usuario.get( session.user.id )

        if(!usuarioInstance) {
            flash.message = "Usuario not found with id ${session.user.id}"
            redirect(action:list)
        }
        else { return [ usuarioInstance : usuarioInstance ] }
    }
/**
* Este metodo elimina el usuario, en caso de no encontrarlo muestra un
* mensaje de error
*/
    def delete = {
        def usuarioInstance = Usuario.get( params.id )
        if(usuarioInstance) {
            try {
                usuarioInstance.delete(flush:true)
                flash.message = "Usuario ${params.id} deleted"
                redirect(action:list)
            }
            catch(org.springframework.dao.DataIntegrityViolationException e) {
                flash.message = "Usuario ${params.id} could not be deleted"
                redirect(action:show,id:params.id)
            }
        }
        else {
            flash.message = "Usuario not found with id ${params.id}"
            redirect(action:list)
        }
    }
/**
* Este metodo imprime los datos del usuario para que sean editados
*/
    def edit = {
        def usuarioInstance = Usuario.get( params.id )

        if(!usuarioInstance) {
            flash.message = "Usuario not found with id ${params.id}"
            redirect(action:list)
        }
        else {
            return [ usuarioInstance : usuarioInstance ]
        }
    }
/**
* Este metodo actualiza los datos modificados del usuario
*/
    def update = {
        def usuarioInstance = Usuario.get( params.id )
        if(usuarioInstance) {
            if(params.version) {
                def version = params.version.toLong()
                if(usuarioInstance.version > version) {
                    
                    usuarioInstance.errors.rejectValue("version", "usuario.optimistic.locking.failure", "Another user has updated this Usuario while you were editing.")
                    render(view:'edit',model:[usuarioInstance:usuarioInstance])
                    return
                }
            }
            usuarioInstance.properties = params
            if(!usuarioInstance.hasErrors() && usuarioInstance.save()) {
                flash.message = "Usuario ${params.id} updated"
                redirect(action:show,id:usuarioInstance.id)
            }
            else {
                render(view:'edit',model:[usuarioInstance:usuarioInstance])
            }
        }
        else {
            flash.message = "Usuario not found with id ${params.id}"
            redirect(action:list)
        }
    }
/**
* Este metodo muestra el formulario para crear el usuario
*/
    def create = {
        def usuarioInstance = new Usuario()
        usuarioInstance.properties = params
        return ['usuarioInstance':usuarioInstance]
    }
/**
* Este metodo guarda el usuario creado
*/
    def save = {
        def usuarioInstance = new Usuario(params)
        if(!usuarioInstance.hasErrors() && usuarioInstance.save()) {
            //flash.message = "Usuario ${usuarioInstance.id} creado"
            render usuarioInstance as XML
            redirect(action:asignarMedioPago, id:usuarioInstance.id)
        }

        else {
            render(view:'create',model:[usuarioInstance:usuarioInstance])
        }

    }
/**
* Este metodo envia un email con la confirmacion del registro del usuario
* en el sistema
*/
     def send={

        sendMail{
         to params.correo
         from "casadeapuestaseel@gmail.com"
         subject "Recuperacion de contraseña"
         body "Registro exitoso. Gracias ${params.nombre} Mucha Suerte! "
         }
         redirect(action:asignarMedioPago, id:params.id)
    }
    
    def AsignarMedioPago = {
            def mediopagousuarioInstance = new Mediopagousuario()
            mediopagousuarioInstance.properties = params
            return ['mediopagousuarioInstance':mediopagousuarioInstance]
    }

    def savemedpag = {
        def mediopagousuarioInstance = new Mediopagousuario(params)

        if(!mediopagousuarioInstance.hasErrors() && mediopagousuarioInstance.save()) {
            //flash.message = "Mediopagousuario ${mediopagousuarioInstance.id} created"
            redirect(action:showmp, id:mediopagousuarioInstance.id)
        }
        else {
            render(view:'create',model:[mediopagousuarioInstance:mediopagousuarioInstance])
        }

    }
    def showmp = {
        def mediopagousuarioInstance = Mediopagousuario.get( params.id )
 
        if(!mediopagousuarioInstance) {
            //flash.message = "Mediopagousuario not found with id ${params.id}"
            redirect(action:list)
        }
        else { return [ mediopagousuarioInstance : mediopagousuarioInstance, id: mediopagousuarioInstance.user.id ] }
    }

    def listnotif = {
        params.max = Math.min( params.max ? params.max.toInteger() : 10,  100)
        def usu = Usuario.get(params.id)
        [ notificacionInstanceList: Notificacion.findAllByUser( usu ), notificacionInstanceTotal: Notificacion.count() ]
    }

    def shownotif = {
        def notificacionInstance = Notificacion.get( params.id )

        if(!notificacionInstance) {
            flash.message = "Notificacion not found with id ${params.id}"
            redirect(action:listnotif)
        }
        else { return [ notificacionInstance : notificacionInstance ] }
    }
}
